package ch01.demo;


import java.lang.reflect.Field;

public class AccessPersonFields {
    public static void main(String[] args) {
        //通过反射操作Person实例
        try {
            Class cls = Class.forName("ch01.demo.Person");
            Object person = cls.newInstance();
            //调用类中的方法和属性，对象名.方法 对象名.属性
            //获取name属性
            Field name = cls.getDeclaredField("name");
            //name属性为private，这里已超出访问范围，不能直接访问
            //通过setAccessible方法,设定为可以访问
            name.setAccessible(true);
            //先取值看一下
            System.out.println("赋值前的name:" + name.get(person));
            //为name属性赋值
            name.set(person, "New Person");  //就相当于调用了setName("New Person)
            //展示一下赋值效果
            System.out.println("赋值后的name:" + name.get(person));
        }catch (InstantiationException e){
            e.printStackTrace();
        }catch (IllegalAccessException e){
            e.printStackTrace();
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }catch (SecurityException e){
            e.printStackTrace();
        }catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }
}
